generated at
作業Log | scrapbox-selection
2020-12-25 11:08:59
11:09:51 scrapbox-char-infoscrapbox-line-info-2を使ってrefactoringする
これclassにする必要あったんだっけ?
11:12:49 選択範囲内のテキストを取得する関数も実装しておく
11:26:33 テストしてみた
取得範囲がずれている
直したいな
ずれないときもあるから困った
かなり微妙な調節が必要そう
Element.getBoundingClientRect()ではなくoffsetLeftなどを使うように変更したほうがいい?
12:12:02 テストコードでいろいろ見る
キー入力のたびに表示されるようにした
12:24:23 やはりずれている
ときときピッタリ合うと思えば、2文字くらい選択範囲を動かしても取得文字が全然変わらないのが問題をややこしくしている
余計なconsole.logがあって見にくいのでそれを消す
その代わりに、実際の選択範囲のgetBoudingClientRectの値と、近辺の文字のそれとを表示して、どんな条件で文字が取得できないのかを調べよう
12:34:10 選択行が一行のときに取得できるテキストがおかしい
なんかむちゃくちゃになってる
一行しかないときは処理を変えないとダメそう
あとなぜかscrapbox-char-infoscrapbox-line-info-2がundefinedだとエラーが出たりする
エラーが出ないときもある
13:15:28 Char.next とかを作ったのに呼び出されないのは、 Char ではなく HTMLSpanElement を呼び出しているからだった
そりゃ無理だ
13:17:40 なおした
13:28:52 面倒なことになっている
本来は i まで選択されているのだが、小数点切り捨ての結果 533 < 533 がfalseとなり、 i が判定から外れてしまう
判定方法を変えるしかなさそう
方法
scrapbox-position#5fd290bb1280f0000006ce1bの切り捨て処理をなくす
これだけだとscrapbox-cursor-position-2の判定がずれると想定されるので、代わりにscrapbox-cursor-position-2#5fe395a41280f00000368cf9に切り捨て処理を追加する
13:44:09 この方法で選択範囲のほうは問題なさそう
14:07:00 right と完全一致してしまうときがある
↑ほんとうは s までしか選択していない
2020-12-26 02:51:50 小数点以下を切り上げないことで判定に失敗した例
までしか選択していないのに、 が入ってしまった
座標判定自体をなんとかしないとダメそうだな……
方法
offsetLeftとかを使う
親要素からの相対座標になるのでかなり複雑になる
強調表示された文字だと、親要素の <strong> からの相対座標に鳴ってしまったり
座標判定に曖昧性をもたせる
閉区間に入っている && 文字の幅の90%以上を含んでいる
↓はbのほんの少しにしか侵入していないので、aまでを選択しているとみなす
選択範囲用の座標判定処理を別途作るしかなさそう
scrapbox-positionは「点」で要素を判定する
↑の図の判定は「面」の情報が必要になる

13:44:24 cursorの方を確認してみる
14:16:07 切り捨てなくても問題なく文字を取得できていそう
2020-12-26 03:06:26 だめだった
困ったなーtakker
座標計算をもう一度考え直す必要があるか
行けそうtakkertakkertakker
早速scrapbox-positionに実装してみる
03:42:28 実装終了
04:26:02 selectionに実装中
char === undefinded のときの処理を作っている
先頭や末尾に選択範囲の端があるときにundefinedになる
04:40:02 実装終了。テスト中
選択範囲の右端が行末にあると、次行も selection.text に含まれてしまう
04:42:06 座標計算の段階で、間違えて次行を選択していると判定してしまっているみたい?
04:48:33 先頭と末尾の文字が含まれていると誤判定するみたい
04:51:05 scrapbox-selection#5fe63adb1280f00000c8b592の条件式を間違えていたのは直した
でもこれだけが原因ではない気がする
一旦テスト
04:54:35 選択範囲の右端が先頭のときに特別な処理をしていたのが原因?
多分違うだろうけど
ただ必要ない処理だったので消した
選択範囲の右端が先頭のときには、幅が0の div.selection がいる
05:02:35 ↑で対処できたみたい
ただ、先頭に選択範囲の右端がいるとき、空行が2つも入ってしまっている?
05:03:17 console.log() で中身をみてみる
05:09:32 行頭から選択しているときに、何故か前行の末尾から選択している判定になってしまっている
scrapbox-positionの値を調べる
05:12:26 start left , right ともに undefined になっている
05:14:27 scrapbox-position#5fe6312e1280f000007d9559で行頭文字の左側の境界との判定を行う際の計算を間違えていた
直してテストする
05:17:59 うまくいった?みたい?
05:18:13 テキストの取得周りを整理する
05:25:32 なんとかなった
コードブロックでまだ微妙なところがあるけど、これは多分自分のCSSが悪さしている
06:06:30 直した
06:21:04 だめだった
空白の大きさが0になってしまう
06:21:20 直し中
07:14:52 修正終了
2020-12-26 07:27:09 とりあえず完成
あとはバグ取りとかだけか
07:29:29 致命的なバグを発見
画像などテキストでない要素の隣などに選択範囲の端があると、正常に範囲を取得できない
#2020-12-26 02:53:05
#2020-12-25 11:08:59